package com.firewolf.hibernate.simple;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;

//@Entity：将一个类声明为一个实体Bean
@Entity(name="user")
//@Table：表信息，name：表名,catalog:catalog名称，默认"",schema:schema名，默认为""
@Table(name="T_USER",catalog="",schema="")
public class User {

	/**
	 @Id ： 主键列
	 @GeneratedValue：定义主键生成策略
	 	strategy：主键生成策略，
	 		GenerationType.AUTO：
	 			根据数据库底层自动选择，如果支持自动增长，就是自动增长
	 		GenerationType.SEQUENCE：
	 			序列，需要和@SequenceGenerator结合使用
	 			generator：序列生成器的名字，定义在@SequenceGenerator中
	 		GenerationType.TABLE：
	 			根据指定表生成主键
	 	generator:生成器的名字，比喻,uuid等，或者选择一个SequenceGenerator或者@TableGenerator
	 @SequenceGenerator: Oracle数据库主键生成策略Sequence，
		 	name:生成器的名字，被@GeneratedValue中的generator使用
		 	sequenceName：数据库中定义的序列名
		 	allocationSize:每次增长的长度
	 */
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
//	@GeneratedValue(strategy = GenerationType.SEQUENCE,generator="seq_gen")
//	@SequenceGenerator(name="seq_gen",sequenceName="tb_seq_gen",allocationSize=1)
	private int id;

	/**
	 @Column ： 列信息
	    name：列名
	    length ： 长度
	 */
	@Column(name="NAME",length=100)
	private String name;
	
	/**
	 * precision ： 有效数字
	 * scale:小数点后面的位数
	 * 这两个是用于oracle的
	 */
	@Column(name="AGE",precision=4,scale=5)
	private double age;
	
	/**
	 * nullable:是否可以为空
	 */
	@Column(name="DESCI",nullable=false)
	private String desci;

	/**
	 * columnDefinition:定义具体的数据库类型，相当于配置文件中sqlType
	 */
	/**
	 * @Basic : 用于声明属性的存取策略 ,
	  	fetch：是否立即加载
	 */
	@Basic(fetch=FetchType.EAGER)
	@Column(name="DATEA",columnDefinition="datetime")
	private Date datea;
	
	/**
	 @Transient : 不映射到数据库中的属性，
	 */
	@Transient
	private String dateStr;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public double getAge() {
		return age;
	}

	public void setAge(double age) {
		this.age = age;
	}

	public String getDesci() {
		return desci;
	}

	public void setDesci(String desci) {
		this.desci = desci;
	}

	public Date getDatea() {
		return datea;
	}

	public void setDatea(Date datea) {
		this.datea = datea;
	}

	public String getDateStr() {
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		return df.format(datea);
	}

	public void setDateStr(String dateStr) {
		this.dateStr = dateStr;
	}
	
	
}
